home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 81
/
PCMania CD81_1.iso
/
PCMANIA
/
demosc81
/
VESA.H
< prev
next >
Wrap
C/C++ Source or Header
|
1999-02-11
|
8KB
|
196 lines
#include "types.h"
#define QUIETMODE 1
#define FAKEMODE -1
#define TEXTMODE -2 // I haven't programmed this yet. (Any suggestion?)
#define m320x400 1
#define m320x480 2
#define m640x400 3
#define m640x480 4
//STRUCTURES & PREDEFINED TYPES
typedef VOID (*FlipProc) (UBYTE *);
typedef VOID (*BankSwitchProc) (UWORD);
typedef VOID (*StuffProc) ();
typedef struct color
{
UWORD r,g,b;
}COLOR;
typedef struct pointer
{
UWORD segment; //Pointer's segment
UWORD selector; //Pointer's selector
UDWORD memAlloc; //size of allocated block (in bytes)
}POINTER;
typedef struct mode
{
UWORD Mode;
UWORD Width;
UWORD Height;
UWORD bpp;
UWORD RedPos;
UWORD GreenPos;
UWORD BluePos;
}MODE;
typedef struct rmregs
{
UDWORD edi;
UDWORD esi;
UDWORD ebp;
UDWORD reserved;
UDWORD ebx;
UDWORD edx;
UDWORD ecx;
UDWORD eax;
UWORD flags;
UWORD es,ds,fs,gs,ip,cs,sp,ss;
}RMREGS;
typedef struct VesaInfo
{
UBYTE Signature[4]; // VBE Signature
UWORD Version; // VBE Version
UWORD OEMNameOffset; // Pointer to OEM string (offset)
UWORD OEMNameSegment; // Pointer to OEM string (segment)
UBYTE Capabilities[4]; // Graphics capabilities of card
UWORD SupportedModesOffset; // Pointer to Video Mode List (offset)
UWORD SupportedModesSegment; // Pointer to Video Mode List (segment)
UWORD TotalMemory; // Number of 64kb memory blocks
//VBE 2.0+
UWORD OemSoftwareRev; // VBE implementation Software revision
UWORD OemVendorNameOffset; // Pointer to Vendor Name String (offset)
UWORD OemVendorNameSegment; // Pointer to Vendor Name String (segment)
UWORD OemProductNameOffset; // Pointer to Product Name String (offset)
UWORD OemProductNameSegment; // Pointer to Product Name String (segment)
UWORD OemProductRevOffset; // Pointer to Product Revision String (offset)
UWORD OemProductRevSegment; // Pointer to Product Revision String (segment)
UBYTE Reserved[222]; // Reserved for VBE implementation
UBYTE OemData[256]; // Data Area for OEM Strings
}VESAINFO;
typedef struct VesaModeInfo
{
UWORD ModeAttributes; // mode attributes
UBYTE WindowAAttributes; // window A attributes
UBYTE WindowBAttributes; // window B attributes
UWORD WindowGranularity; // window granularity
UWORD WindowSize; // window size
UWORD StartSegmentWindowA; // window A start segment
UWORD StartSegmentWindowB; // window B start segment
VOID (*WinPosFunction)(SDWORD page); // pointer to window function
UWORD BytesPerScanLine; // bytes per scan line
//Remainder of this structure is optional for VESA modes in v1.0/1.1, needed for OEM modes.
UWORD PixelWidth; // horizontal resolution in pixels or chars
UWORD PixelHeight; // vertical resolution in pixels or chars
UBYTE CharacterCellPixelWidth; // character cell width in pixels
UBYTE CharacterCellPixelHeight; // character cell height in pixels
UBYTE NumberOfMemoryPlanes; // number of memory planes
UBYTE BitsPerPixel; // bits per pixel
UBYTE NumberOfBanks; // number of banks
UBYTE MemoryModelType; // memory model type
UBYTE SizeOfBank; // bank size in KB
UBYTE NumberOfImagePages; // number of images
UBYTE Reserved1; // reserved for page function
//VBE v1.2+
UBYTE RedMaskSize; // size of direct color red mask in bits
UBYTE RedFieldPosition; // bit position of lsb of red mask
UBYTE GreenMaskSize; // size of direct color green mask in bits
UBYTE GreenFieldPosition; // bit position of lsb of green mask
UBYTE BlueMaskSize; // size of direct color blue mask in bits
UBYTE BlueFieldPosition; // bit position of lsb of blue mask
UBYTE ReservedMaskSize; // size of direct color reserved mask in bits
UBYTE ReservedFieldPosition; // bit position of lsb of reserved mask
UBYTE DirectColourModeInfo; // direct color mode attributes
//VBE v2.0+
UWORD PhysicalBaseOffset; // physical address for flat frame buffer (offset)
UWORD PhysicalBaseSegment; // physical address for flat frame buffer (segment)
UWORD OffScreenMemOffset; // pointer to start of off screen memory (offset)
UWORD OffScreenMemSegment; // pointer to start of off screen memory (segment)
UWORD OffScreenMemSize; // amount of off screen memory in 1k units
UBYTE Reserved2[206]; // Do you guess it??
} VESAMODEINFO;
typedef struct resolution {
UWORD Width;
UWORD Height;
SWORD bpp;
UDWORD ResolSize;
}RESOLUTION;
typedef struct videomode {
RESOLUTION Work;
RESOLUTION Screen;
UWORD RedShift;
UWORD GreenShift;
UWORD BlueShift;
UWORD NumBanks;
UWORD NextBank;
UDWORD XRatio;
UDWORD YRatio;
BOOL EnableLFB;
COLOR *Palette;
FlipProc FlipVideo;
StuffProc InitStuff;
StuffProc EndStuff;
}VIDEOMODE;
#ifdef __VESA
static VESAINFO far *Vesa_Info = NULL;
static POINTER Vesa_Info_Ptr;
static VESAMODEINFO far *Vesa_Mode_Info = NULL;
static POINTER Vesa_Mode_Info_Ptr;
static BankSwitchProc SetBank;
static UDWORD BankSwitchPtr;
static UDWORD ScreenAddress;
static UBYTE *Screen= (UBYTE *) 0xA0000;
UBYTE *ScreenBuffer;
VIDEOMODE Active;
UBYTE Error_Code;
MODE Vesa_Modes[256];
#else
//PUBLIC VARIABLES
extern VIDEOMODE Active;
extern UBYTE Error_Code;
extern UBYTE *ScreenBuffer;
extern MODE Vesa_Modes[256];
#endif
BOOL InitSetMode();
VOID far *Dos_Alloc(POINTER *In, UDWORD bytes);
BOOL Dos_Dealloc(POINTER *In);
VOID Real_Int(UDWORD nint, RMREGS *rmregs);
BOOL Get_Vesa_Info();
BOOL Free_Memory();
VOID ErrorMsg();
VOID Get_Modes_Info();
VOID Show_Modes_Info();
BOOL Set_Vesa_Mode(UWORD Width, UWORD Height, UWORD bpp, BOOL LFB);
VOID Flip_Banked(UBYTE *WorkBuffer);
VOID FlipBuc(UBYTE *Buffer,UDWORD Total);
VOID Flip_LFB(UBYTE *WorkBuffer);
VOID Flip_Fake_X(UBYTE *WorkBuffer);
VOID Flip(UBYTE *Buffer);
VOID Manual_Bank_Switch(UWORD NumBank);
VOID Internal_Bank_Switch(UWORD nBank);
VOID Wait();
BOOL VesaSystem();
BOOL FakeSystem();
VOID InterBank(UWORD Bank);
VOID Set_Mode(UWORD Mode);
VOID Flip_ScreenB(UBYTE *, UDWORD);
VOID Flip_ScreenW(UBYTE *, UDWORD);
VOID Flip_ScreenD(UBYTE *, UDWORD);